home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1998 / MacHack 1998.toast / The Hacks! / COSEmulator / COSEmulator- SRC / src / WindowList.cpp < prev    next >
Encoding:
Text File  |  1998-06-21  |  11.1 KB  |  481 lines  |  [TEXT/CWIE]

  1. //===================================================================
  2. //=======================  Headers        =============================
  3.  
  4. #include "WindowList.h"
  5.  
  6.  
  7. //===================================================================
  8. //=======================  Globals        =============================
  9.  
  10. //===================================================================
  11. //=======================  #define        =============================
  12.  
  13.  
  14. //===================================================================
  15. //=======================  Function Prototypes    =====================
  16.  
  17. /*----------------------------------------------------------------------------\
  18.  
  19.     NormalWindowList :: Constructor
  20.  
  21. \----------------------------------------------------------------------------*/
  22.     NormalWindowList :: NormalWindowList( void )
  23.                 : LinkListClass< Window >()
  24. {
  25.     backGround = false;
  26. }
  27.  
  28. /*----------------------------------------------------------------------------\
  29.  
  30.     NormalWindowList :: AddWindow
  31.  
  32. \----------------------------------------------------------------------------*/
  33. void    NormalWindowList :: AddWindow( Window *w )
  34. {
  35. // make what ever was in front not active any more
  36.     if( FirstLink != NULL )
  37.     {
  38.         FirstLink->SetFront( false );
  39.     }
  40.  
  41.     w->SetFront( true );
  42.     AddToList( w );
  43. }
  44.  
  45. /*----------------------------------------------------------------------------\
  46.  
  47.     NormalWindowList :: RemoveWindow
  48.  
  49. \----------------------------------------------------------------------------*/
  50. void    NormalWindowList :: RemoveWindow( Window *w )
  51. {
  52.     w->AddToUpdate();
  53.     RemoveFromList( w );
  54. }
  55.  
  56. /*----------------------------------------------------------------------------\
  57.  
  58.     NormalWindowList :: DrawAll
  59.  
  60. \----------------------------------------------------------------------------*/
  61. void    NormalWindowList ::DrawAll( rect *where )
  62. {
  63.     Window    *link = LastLink;
  64.         
  65.     while( link != NULL )
  66.     {
  67.         link->DrawToScreen( where , backGround );
  68.         
  69.         link = link->previous;
  70.     }
  71. }
  72.  
  73. /*----------------------------------------------------------------------------\
  74.  
  75.     NormalWindowList :: HandleMouseClick
  76.  
  77. \----------------------------------------------------------------------------*/
  78. Boolean    NormalWindowList :: HandleMouseClick( Boolean down , point where )
  79. {
  80. // check to see if the active window was clicked
  81.     if( FirstLink == NULL )
  82.         return false;
  83.         
  84.     if( down )
  85.         return HandleMouseDown( where );
  86.  
  87.     HandleMouseUp( where );
  88.     
  89.     return false;
  90. }
  91.  
  92. /*----------------------------------------------------------------------------\
  93.  
  94.     NormalWindowList :: HandleMouseMove
  95.  
  96. \----------------------------------------------------------------------------*/
  97. void    NormalWindowList :: HandleMouseMove( point where )
  98. {
  99. // check to see if the active window was clicked
  100.     if( FirstLink == NULL )
  101.         return;
  102.         
  103.     FirstLink->HandleMouseMove( where );
  104. }
  105.  
  106. /*----------------------------------------------------------------------------\
  107.  
  108.     NormalWindowList :: SetBackGround
  109.  
  110. \----------------------------------------------------------------------------*/
  111. void    NormalWindowList :: SetBackGround( Boolean b )
  112. {
  113.     if( backGround != b )
  114.     {
  115.         backGround = b;
  116.     }
  117. }
  118.  
  119. /*----------------------------------------------------------------------------\
  120.  
  121.     NormalWindowList :: HandleMouseDown
  122.  
  123. \----------------------------------------------------------------------------*/
  124. Boolean    NormalWindowList :: HandleMouseDown( point where )
  125. {
  126.     if( FirstLink->PointInWindow( where ) )
  127.     {
  128.         if( !FirstLink->Front() )
  129.         {
  130.             FirstLink->SetFront( true );
  131.         }
  132.         else
  133.             FirstLink->HandleMouseClick( true , where );
  134.         
  135.         return true;
  136.     }
  137.     else // else go through window list and see wha twas clicked
  138.     {
  139.         Window    *link = FirstLink->next;
  140.         
  141.         while( link != NULL )
  142.         {
  143.             if( link->PointInWindow( where ) )
  144.             {
  145.                 FirstLink->SetFront( false );
  146.                 link->SetFront( true );
  147.                 
  148.                 MoveBefore( FirstLink , link );
  149.                 
  150.                 return true;
  151.             }
  152.             link = link->next;
  153.         }
  154.     }
  155.     
  156. // no window was clicked, make the desk top active
  157.     if( FirstLink != NULL )
  158.     {
  159.         if( FirstLink->Front() )
  160.         {
  161.             FirstLink->SetFront( false );
  162.         }
  163.     }
  164.     
  165.     return false;
  166. }
  167.  
  168. /*----------------------------------------------------------------------------\
  169.  
  170.     NormalWindowList :: HandleMouseUp
  171.  
  172. \----------------------------------------------------------------------------*/
  173. void    NormalWindowList :: HandleMouseUp( point where )
  174. {
  175.     FirstLink->HandleMouseClick( false , where );
  176. }
  177.  
  178. /*----------------------------------------------------------------------------\
  179.  
  180.     FrontWindowList :: Constructor
  181.  
  182. \----------------------------------------------------------------------------*/
  183.     FrontWindowList :: FrontWindowList( void )
  184.                 : LinkListClass< Window >()
  185. {
  186.     backGround = false;
  187. }
  188.  
  189. /*----------------------------------------------------------------------------\
  190.  
  191.     FrontWindowList :: AddWindow
  192.  
  193. \----------------------------------------------------------------------------*/
  194. void    FrontWindowList :: AddWindow( Window *w )
  195. {
  196. // make what ever was in front not active any more
  197.     if( FirstLink != NULL )
  198.     {
  199.         FirstLink->SetFront( false );
  200.     }
  201.  
  202.     w->SetFront( true );
  203.     AddToList( w );
  204.     w->AddToUpdate();
  205. }
  206.  
  207. /*----------------------------------------------------------------------------\
  208.  
  209.     FrontWindowList :: DrawAll
  210.  
  211. \----------------------------------------------------------------------------*/
  212. void    FrontWindowList ::DrawAll( rect *where )
  213. {
  214.     Window    *link = LastLink;
  215.         
  216.     while( link != NULL )
  217.     {
  218.         link->DrawToScreen( where , backGround );
  219.         
  220.         link = link->previous;
  221.     }
  222. }
  223.  
  224. /*----------------------------------------------------------------------------\
  225.  
  226.     FrontWindowList :: HandleMouseClick
  227.  
  228. \----------------------------------------------------------------------------*/
  229. Boolean    FrontWindowList :: HandleMouseClick( Boolean down , point where )
  230. {
  231. // check to see if the active window was clicked
  232.     if( FirstLink == NULL )
  233.         return false;
  234.         
  235.     if( down )
  236.         return HandleMouseDown( where );
  237.  
  238.     HandleMouseUp( where );
  239.     
  240.     return false;}
  241.  
  242. /*----------------------------------------------------------------------------\
  243.  
  244.     FrontWindowList :: HandleMouseMove
  245.  
  246. \----------------------------------------------------------------------------*/
  247. void    FrontWindowList :: HandleMouseMove( point where )
  248. {
  249. // check to see if the active window was clicked
  250.     if( FirstLink == NULL )
  251.         return;
  252.         
  253.     FirstLink->HandleMouseMove( where );
  254. }
  255.  
  256. /*----------------------------------------------------------------------------\
  257.  
  258.     FrontWindowList :: RemoveWindow
  259.  
  260. \----------------------------------------------------------------------------*/
  261. void    FrontWindowList :: RemoveWindow( Window *w )
  262. {
  263.     w->AddToUpdate();
  264.     RemoveFromList( w );
  265. }
  266.  
  267. /*----------------------------------------------------------------------------\
  268.  
  269.     FrontWindowList :: SetBackGround
  270.  
  271. \----------------------------------------------------------------------------*/
  272. void    FrontWindowList :: SetBackGround( Boolean b )
  273. {
  274.     if( backGround != b )
  275.     {
  276.         backGround = b;
  277.     }
  278. }
  279.  
  280. /*----------------------------------------------------------------------------\
  281.  
  282.     FrontWindowList :: HandleMouseDown
  283.  
  284. \----------------------------------------------------------------------------*/
  285. Boolean    FrontWindowList :: HandleMouseDown( point where )
  286. {
  287.     if( FirstLink->PointInWindow( where ) )
  288.     {
  289.         if( !FirstLink->Front() )
  290.         {
  291.             FirstLink->SetFront( true );
  292.             FirstLink->HandleMouseClick( true , where );
  293.         }
  294.         else
  295.             FirstLink->HandleMouseClick( true , where );
  296.         
  297.         return true;
  298.     }
  299.     else // else go through window list and see wha twas clicked
  300.     {
  301.         Window    *link = FirstLink->next;
  302.         
  303.         while( link != NULL )
  304.         {
  305.             if( link->PointInWindow( where ) )
  306.             {
  307.                 FirstLink->SetFront( false );
  308.                 link->SetFront( true );
  309.                 
  310.                 MoveBefore( FirstLink , link );
  311.                 
  312.                 FirstLink->HandleMouseClick( true , where );
  313.                 
  314.                 return true;
  315.             }
  316.             link = link->next;
  317.         }
  318.     }
  319.     
  320. // no window was clicked, make the desk top active
  321.     if( FirstLink != NULL )
  322.     {
  323.         if( FirstLink->Front() )
  324.         {
  325.             FirstLink->SetFront( false );
  326.         }
  327.     }
  328.     
  329.     return false;
  330. }
  331.  
  332. /*----------------------------------------------------------------------------\
  333.  
  334.     FrontWindowList :: HandleMouseUp
  335.  
  336. \----------------------------------------------------------------------------*/
  337. void    FrontWindowList :: HandleMouseUp( point where )
  338. {
  339.     FirstLink->HandleMouseClick( false , where );
  340. }
  341.  
  342. /*----------------------------------------------------------------------------\
  343.  
  344.     MenuWindowList :: Constructor
  345.  
  346. \----------------------------------------------------------------------------*/
  347.     MenuWindowList :: MenuWindowList( void )
  348.                 : LinkListClass< Window >()
  349. {
  350.     backGround = false;
  351. }
  352.  
  353. /*----------------------------------------------------------------------------\
  354.  
  355.     MenuWindowList :: AddWindow
  356.  
  357. \----------------------------------------------------------------------------*/
  358. void    MenuWindowList :: AddWindow( Window *w )
  359. {
  360. // make what ever was in front not active any more
  361.     if( FirstLink != NULL )
  362.     {
  363.         FirstLink->SetFront( false );
  364.     }
  365.  
  366.     w->SetFront( true );
  367.     AddToList( w );
  368. }
  369.  
  370. /*----------------------------------------------------------------------------\
  371.  
  372.     MenuWindowList :: DrawAll
  373.  
  374. \----------------------------------------------------------------------------*/
  375. void    MenuWindowList ::DrawAll( rect *where )
  376. {
  377.     Window    *link = LastLink;
  378.         
  379.     while( link != NULL )
  380.     {
  381.         link->DrawToScreen( where , backGround );
  382.         
  383.         link = link->previous;
  384.     }
  385. }
  386.  
  387. /*----------------------------------------------------------------------------\
  388.  
  389.     MenuWindowList :: HandleMouseClick
  390.  
  391. \----------------------------------------------------------------------------*/
  392. Boolean    MenuWindowList :: HandleMouseClick( Boolean down , point where )
  393. {
  394. // check to see if the active window was clicked
  395.     if( FirstLink == NULL )
  396.         return false;
  397.         
  398.     if( down )
  399.         return HandleMouseDown( where );
  400.  
  401.     HandleMouseUp( where );
  402.     
  403.     return false;
  404. }
  405.  
  406. /*----------------------------------------------------------------------------\
  407.  
  408.     MenuWindowList :: HandleMouseMove
  409.  
  410. \----------------------------------------------------------------------------*/
  411. void    MenuWindowList :: HandleMouseMove( point where )
  412. {
  413. // check to see if the active window was clicked
  414.     if( FirstLink == NULL )
  415.         return;
  416.         
  417.     Window    *link = FirstLink;
  418.     
  419.     while( link != NULL )
  420.     {
  421.         link->HandleMouseMove( where );
  422.         
  423.         link = link->next;
  424.     }
  425. }
  426.  
  427. /*----------------------------------------------------------------------------\
  428.  
  429.     MenuWindowList :: SetBackGround
  430.  
  431. \----------------------------------------------------------------------------*/
  432. void    MenuWindowList :: SetBackGround( Boolean b )
  433. {
  434.     if( backGround != b )
  435.     {
  436.         backGround = b;
  437.     }
  438. }
  439.  
  440. /*----------------------------------------------------------------------------\
  441.  
  442.     MenuWindowList :: HandleMouseDown
  443.  
  444. \----------------------------------------------------------------------------*/
  445. Boolean    MenuWindowList :: HandleMouseDown( point where )
  446. {
  447.  
  448.     Window    *link = FirstLink;
  449.         
  450.     while( link != NULL )
  451.     {
  452.         if( link->PointInWindow( where ) )
  453.         {
  454.             link->HandleMouseClick( true , where );
  455.             return true;
  456.         }
  457.         link = link->next;
  458.     }
  459.     
  460.     return false;
  461. }
  462.  
  463. /*----------------------------------------------------------------------------\
  464.  
  465.     MenuWindowList :: HandleMouseUp
  466.  
  467. \----------------------------------------------------------------------------*/
  468. void    MenuWindowList :: HandleMouseUp( point where )
  469. {
  470.     Window    *link = FirstLink;
  471.         
  472.     while( link != NULL )
  473.     {
  474.         if( link->PointInWindow( where ) )
  475.         {
  476.             link->HandleMouseClick( false , where );
  477.         }
  478.         link = link->next;
  479.     }
  480. }
  481.